// es5异步：
// 先去异步加载1.js，然后等1.js加载完成后执行test:
// function loadScript(src, callback) {
//     let script = document.createElement('script');
//     script.src = src;
//     script.onload = function () {
//         callback(src)
//     }
//     script.onerr = (err) => {
//         callback(err)
//     }
//     document.head.append(script);

// }

// function test(name) {
//     console.log(name)
// }


// // loadScript('./1.js', test); //输出1


// loadScript('./1.js', function (script) {
//     console.log(script)
//     loadScript('./2.js', function (script) {
//         console.log(script)
//         loadScript('./3.js', function (script) {
//             console.log(script)
//         })
//     })
// }) //输出1,2,3




// es6,promise:

function test(name) {
    console.log(name)
}

// new Promise的时候是返回了一个状态 (pending,挂起),通过resolve,reject去返回状态

// function loadScript(src) {
//     // 传递一个函数，函数有两个参数其本身也是函数  pending,undefined
//     return new Promise((resolve, reject) => {
//         let script = document.createElement('script');
//         script.src = src;
//         script.onload = () => resolve(src); //fulfilled,result  ,这两个方法用来改变promise状态和结果
//         script.onerror = (err) => reject(err); //rejected,error
//         document.head.append(script)
//     })
// }
// // loadScript('./1.js')
// //     .then(loadScript('./2.js'))
// //     .then(loadScript('./3.js'));

// loadScript('./1.js')
//     .then(() => {
//         // 要想影响到下一个promise对象,需要有返回值，默认如果没有函数返回则会返回一个空的 promise，因此会接着执行loadScirpt3
//         return loadScript('./4.js')
//     }, (err) => {
//         console.log(err)
//     })
//     // 会返回新的promise实例
//     .then(() => {
//         loadScript('./3.js')
//     }, (err) => {
//         console.log(err)
//     })

// Promise.then(onFulfilled,onRejected) ,then是返回一个新的promise对象

// 获取离线或者线上数据的判断：
// function test(bool) {
//     if (bool) {
//         return new Promise((resolve, reject) => {
//             resolve(30)
//         })
//     } else {
//         // return 42
//         return Promise.resolve(42)
//     }
// }
// test(0).then((value) => {
//     console.log(value)
// })

function test(bool) {
    if (bool) {
        return new Promise((resolve, reject) => {
            resolve(30)
        })
    } else {
        // return 42
        return Promise.reject(new Error('出错啦'))
    }
}
test(0).then((value) => {
    console.log(value)
}, (err) => {
    console.log(err)
})